package com.sjb.training.lc;

/**
 * Created with IntelliJ IDEA.
 * lc.209 长度最小的子数组 滑动窗口
 *
 * @Author: 有点儿意思
 * @Description:
 */
public class MinSubArrayLen {
    public static void main(String[] args) {
        int[] nums = {2,3,1,2,4,3};
        int len = minSubArrayLen(7, nums);
        System.out.println(len);
    }


    /**
     * 滑动窗口
     * @param target
     * @param nums
     * @return
     */
    public static int minSubArrayLen(int target, int[] nums) {
        int left = 0, sum = 0;
        // 定义长度的最大值与之比较
        int result = Integer.MAX_VALUE;
        // 确定终止位置j
        for (int right = 0; right < nums.length; right++) {
            // 确定集合区间内的和
            sum += nums[right];
            // 当 和 大于等于 给定目标值target时
            while (sum >= target) {
                // 确定 区间内的 和 的数组长度是否是最小
                result = Math.min(result, right - left + 1);
                // 更新 和
                sum = sum - nums[left++];
            }
        }
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}
